SDLC軟體生命週期(Software Development Lifecycle)一個框架,目的是定義軟體開發過程中每個步驟執行的任務,可以簡單理解成軟體從計畫開發、實際開發到上線維運是一個週期,我們把每一個階段都做切割以便管理和規劃。
一般常見的多切割為:
需求分析 -> 設計 -> 實施 -> 測試 -> 部署 -> 維運
圖片來源:https://lvivity.com/sdlc-overview
而安全軟體生命週期(Secure Software Development Lifecycle)則是希望把每個階段都將「安全」納入考量。
包含但不限於像是在需求分析階段進行威脅建模(threat modeling);在設計及實施階段遵循OWASP 的 Secure Coding Practices(這是本次鐵人賽會專注提升的部分);在測試階段進行軟體原始碼掃描、弱點掃描分析;維運階段時常監控安全日誌等。
簡單理解成前一個階段完成後接著做下一個階段,循序漸進的將軟體開發完成。優點是很直觀,專案進度也比較好掌握(里程碑/檢查點好設),缺點是如果到後面測試階段才發生問題,就得要往前追溯,有時候前面階段卡太久也會影響到後面的進度,因此在前期規劃就要比較縝密,文件要寫比較多,須詳細紀錄及規範開發過程中的需求和定義。大部分傳產和大型公司都是採用瀑布式開發。
圖片來源:https://medium.com/@ksandhya/the-waterfall-model-a-linear-approach-to-software-development-73bb48e154b4
比瀑布式再更進階一點,提倡在規劃及開發時就加入測試、驗證及思考部署上線後可能會為面臨的問題,預先思考可能會出錯的點以降低到後期階段發現錯誤的可能性,每個階段的工作量增加,但也有助於在計畫的時間點完成,產品良率也比較高。越來越多公司採用這種形式開發。
圖片來源:https://www.consilia-brno.com/experience/comparison-of-v-model-and-agile-software-development-methodology
他還有很多分支,像是Scrum、Kanban,訴求是針對「目標問題」快速解決,前提是每個成員都要對自己目前設計的產品有一定的熟悉度,及了解各成員彼此的進度,因此大多實施敏捷開發的公司都常常在開會(X),大家各自完成自己的部分然後再合併起來及持續逐步修改。很多新創公司都採用敏捷思考,也因為成效不錯所以一些大公司也在考慮轉型採用敏捷開發。
圖片來源:https://www.consilia-brno.com/experience/comparison-of-v-model-and-agile-software-development-methodology
除了軟體開發之外,另外還有資料週期,一般將各階段區分為:
建立 -> 儲存 -> 使用 -> 分享 -> 封存 -> 銷毀
圖片來源:https://www.clicdata.com/blog/complete-guide-data-lifecycle-management/
每個階段也能實施相對的安全措施,像是資料儲存階段使用有效的加密演算法像sha-256、RSA;資料銷毀使用消磁而非單純物理破壞等方法。